@Niki
3年前 提问
1个回答
inputstream 中文乱码产生原因
Ann
3年前
直接读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码。
InputStream,字面意思字节输入点,也就是说以字节为单位进行流式数据的读取。它是所有字节输入流的基类,同时是一个抽象类,如果要使用需要使用其子类。常见的有FileInputStream,从文件中读取字节输入流;BufferedInputStream是带缓冲区的输入流,它继承于FilterInputStream。默认缓冲区大小是8M,能够减少访问磁盘的次数,提高文件读取性能。不管是哪种字节输入流,读取的是字节byte,GBK每个汉字两个字节,UTF-8每个汉字三个字节而当中英文混合的时候,有的字符占一个字节,有的字符占两个字节。
所以如果直接读字节,而数据比较长,没有一次读完的时候,很可能刚好读到一个汉字的前一个字节,这样,这个中文就成了乱码,后面的数据因为没有字节对齐,也都成了乱码。
解决办法,首先在读取的时如果涉及汉字我们要设置字符集编码,采用字符流进行读取比如InputStreamReader,FileReader,BufferedReader 。